#ifndef POOL_H
#define POOL_H

#include "inc.h"

/*
线程池
1、任务队列
2、锁

*/

class ThreadPool
{

public:
    ThreadPool(size_t numThreads);
    ~ThreadPool();
    //模板函数的定义通常需要包含在头文件中，以便在使用时进行实例化
    template<typename Func>
    void Push(Func&& func)
    {
        {
            std::unique_lock<std::mutex> lock(m_queueMutex);
            m_tasks.emplace(std::forward<Func>(func));//完美转发，保持右值属性
        }
        m_condition.notify_one();//通知某个空闲的线程
    }
private:
    std::vector<std::thread> m_workers;//工作线程
    std::queue<std::function<void()>> m_tasks;//任务队列，执行某个任务
    std::mutex m_queueMutex; //锁
    std::condition_variable m_condition;//条件变量
    bool m_stop; //标志位
};

#endif